// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef GPU_GLES2_CONFORM_TEST_CONFIG_H_
#define GPU_GLES2_CONFORM_TEST_CONFIG_H_

#include <EGL/egl.h>

#include "base/basictypes.h"

namespace egl {

class Config {
public:
    Config();
    ~Config();

    bool GetAttrib(EGLint attribute, EGLint* value) const;

private:
    // Total color component bits in the color buffer.
    EGLint buffer_size_;
    // Bits of Red in the color buffer.
    EGLint red_size_;
    // Bits of Green in the color buffer.
    EGLint green_size_;
    // Bits of Blue in the color buffer.
    EGLint blue_size_;
    // Bits of Luminance in the color buffer.
    EGLint luminance_size_;
    // Bits of Alpha in the color buffer.
    EGLint alpha_size_;
    // Bits of Alpha Mask in the mask buffer.
    EGLint alpha_mask_size_;
    // True if bindable to RGB textures.
    EGLBoolean bind_to_texture_rgb_;
    // True if bindable to RGBA textures.
    EGLBoolean bind_to_texture_rgba_;
    // Color buffer type.
    EGLenum color_buffer_type_;
    // Any caveats for the configuration.
    EGLenum config_caveat_;
    // Unique EGLConfig identifier.
    EGLint config_id_;
    // Whether contexts created with this config are conformant.
    EGLint conformant_;
    // Bits of Z in the depth buffer.
    EGLint depth_size_;
    // Frame buffer level.
    EGLint level_;
    // Maximum width of pbuffer.
    EGLint max_pbuffer_width_;
    // Maximum height of pbuffer.
    EGLint max_pbuffer_height_;
    // Maximum size of pbuffer.
    EGLint max_pbuffer_pixels_;
    // Minimum swap interval.
    EGLint min_swap_interval_;
    // Maximum swap interval.
    EGLint max_swap_interval_;
    // True if native rendering APIs can render to surface.
    EGLBoolean native_renderable_;
    // Handle of corresponding native visual.
    EGLint native_visual_id_;
    // Native visual type of the associated visual.
    EGLint native_visual_type_;
    // Which client rendering APIs are supported.
    EGLint renderable_type_;
    // Number of multisample buffers.
    EGLint sample_buffers_;
    // Number of samples per pixel.
    EGLint samples_;
    // Bits of Stencil in the stencil buffer.
    EGLint stencil_size_;
    // Which types of EGL surfaces are supported.
    EGLint surface_type_;
    // Type of transparency supported
    EGLenum transparent_type_;
    // Transparent red value
    EGLint transparent_red_value_;
    // Transparent green value
    EGLint transparent_green_value_;
    // Transparent blue value
    EGLint transparent_blue_value_;

    DISALLOW_COPY_AND_ASSIGN(Config);
};

} // namespace egl

#endif // GPU_GLES2_CONFORM_TEST_CONFIG_H_
